﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Sisco.AplicacionEscritorio.Util
{
    public partial class FormularioBuscar : Form
    {
        private string nombre;
        private Dictionary<string, string> listBusqueda;
        private object objetoBuscado;

        public object ObjetoBuscado
        {
            get { return objetoBuscado; }
            set { objetoBuscado = value; }
        }

        public FormularioBuscar()
        {
            InitializeComponent();
            listBusqueda = new Dictionary<string, string>();
        }

        public FormularioBuscar(string nombreClase)
            : this()
        {
            nombre = nombreClase;
        }

        private void FormularioBuscar_Load(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(nombre))
            {
                this.CargarListaBusqueda();                
                cmbBuscarPor.DataSource = new BindingSource(listBusqueda,null);
                cmbBuscarPor.ValueMember = "Key";
                cmbBuscarPor.DisplayMember = "Value";
                cmbBuscarPor.SelectedIndex = 1; 
                this.SetCharacterCassingTextBox();
            }
        }

        private void CargarListaBusqueda()
        {
            switch (nombre)
            {
                case "Usuario":
                    listBusqueda.Add("CODIGO_RRHH", "Código de empleado");
                    listBusqueda.Add("NOMBRE", "Nombre");
                    listBusqueda.Add("APELLIDOS", "Apellidos");
                    listBusqueda.Add("NOMBRECOMPLETO", "Nombre completo");
                    break;
                case "Equipo":
                    listBusqueda.Add("TIPOEQUIPO", "Tipo de equipo");
                    listBusqueda.Add("MARCA", "Marca");
                    listBusqueda.Add("MODELO", "Modelo");
                    listBusqueda.Add("SERIE", "Serie");
                    break;
            }
        }

        private void SetCharacterCassingTextBox()
        {
            switch (nombre)
            {
                case "Usuario":
                    txtValor.CharacterCasing = CharacterCasing.Upper;
                    break;
                case "Equipo":
                    string firstValue = cmbBuscarPor.SelectedValue.ToString();

                    if (firstValue.Equals("TIPOEQUIPO"))
                    {
                        txtValor.CharacterCasing = CharacterCasing.Normal;
                    }
                    else
                    {
                        txtValor.CharacterCasing = CharacterCasing.Upper;
                    }

                    break;
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            if (cmbBuscarPor.SelectedIndex >= 0)
            {
                object resultado = null;
                string atributo = string.Empty;

                switch (nombre)
                {
                    case "Usuario":
                        Sisco.LogicaNegocio.UsuarioBLL usuarioBLL = new LogicaNegocio.UsuarioBLL();

                        atributo = cmbBuscarPor.SelectedValue.ToString();
                        resultado = usuarioBLL.Buscar(atributo, txtValor.Text);
                        break;
                    case "Equipo":
                        Sisco.LogicaNegocio.EquipoBLL equipoBLL = new LogicaNegocio.EquipoBLL();

                        atributo = cmbBuscarPor.SelectedValue.ToString();
                        resultado = equipoBLL.Buscar(atributo, txtValor.Text);
                        break;
                }

                if (resultado != null)
                {       
                    gridBusqueda.DataSource = null;
                    gridBusqueda.DataSource = resultado;
                    gridBusqueda.ClearSelection();
                }
            }
        }

        private void gridBusqueda_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (gridBusqueda.DataSource != null)
            {
                switch (nombre)
                {
                    case "Usuario":
                        gridBusqueda.Columns["ID"].Visible = false;
                        gridBusqueda.Columns["IDUSUARIO"].Visible = false;
                        gridBusqueda.Columns["IDEMPRESA"].Visible = false;
                        gridBusqueda.Columns["IDSUCURSAL"].Visible = false;
                        gridBusqueda.Columns["IDDEPARTAMENTO"].Visible = false;
                        gridBusqueda.Columns["SUCURSAL"].Visible = false;
                        gridBusqueda.Columns["CODIGO_RRHH"].HeaderText = "Código";
                        gridBusqueda.Columns["USUARIO_WINDOWS"].Visible = false;
                        gridBusqueda.Columns["USUARIO_DBS"].Visible = false;
                        gridBusqueda.Columns["NOMBRES"].HeaderText = "Nombre y apellidos";                        
                        gridBusqueda.Columns["APELLIDOS"].HeaderText = "Apellidos";
                        gridBusqueda.Columns["NOMBRECOMPLETO"].HeaderText = "Nombre completo";
                        gridBusqueda.Columns["CORREO"].Visible = false;
                        gridBusqueda.Columns["OFICINA"].Visible = false;
                        gridBusqueda.Columns["DEPARTAMENTO"].HeaderText = "Departamento";
                        gridBusqueda.Columns["TELEFONO"].Visible = false;
                        gridBusqueda.Columns["ANEXO"].Visible = false;
                        gridBusqueda.Columns["ELIMINADO"].Visible = false;
                        gridBusqueda.Columns["REPARADOR"].Visible = false;
                        gridBusqueda.Columns["USUARIO_SIST"].Visible = false;
                        gridBusqueda.Columns["PASSWORD_SIST"].Visible = false;
                        gridBusqueda.Columns["RPM"].Visible = false;
                        gridBusqueda.Columns["RPC"].Visible = false;
                        gridBusqueda.Columns["NEXTEL"].Visible = false;
                        gridBusqueda.Columns["CELULAR"].Visible = false;
                        gridBusqueda.Columns["FECHAREGISTRO"].Visible = false;
                        gridBusqueda.Columns["FECHAMODIFICACION"].Visible = false;
                        gridBusqueda.Columns["PERSCONTACTO"].Visible = false;
                        gridBusqueda.Columns["EQUIPO"].Visible = false;
                        gridBusqueda.Columns["PROBLEMA"].Visible = false;
                        gridBusqueda.Columns["DEPARTAMENTO1"].Visible = false;
                        gridBusqueda.Columns["SUCURSAL1"].Visible = false;
                        gridBusqueda.Columns["MODIFICADOPOR"].Visible = false;
                        gridBusqueda.Columns["REGISTRADOPOR"].Visible = false;
                        break;
                    case "Equipo":
                        gridBusqueda.Columns["ID"].Visible = false;
                        gridBusqueda.Columns["IDUSUARIO"].Visible = false;
                        gridBusqueda.Columns["IDEQUIPO"].Visible = false;
                        gridBusqueda.Columns["IDTIPOEQUIPO"].Visible = false;
                        gridBusqueda.Columns["IDESTADO"].Visible = false;
                        gridBusqueda.Columns["TIPOEQUIPO"].Visible = false;
                        gridBusqueda.Columns["MARCA"].HeaderText = "Marca";
                        gridBusqueda.Columns["MODELO"].HeaderText = "Modelo";
                        gridBusqueda.Columns["SERIE"].HeaderText = "Serie";
                        gridBusqueda.Columns["ELIMINADO"].Visible = false;
                        gridBusqueda.Columns["IDUSUARIOANTIGUO"].Visible = false;
                        gridBusqueda.Columns["ASIGNADO"].Visible = false;
                        gridBusqueda.Columns["FECHAREGISTRO"].Visible = false;
                        gridBusqueda.Columns["REGISTRADOPOR"].Visible = false;
                        gridBusqueda.Columns["FECHAMODIFICACION"].Visible = false;
                        gridBusqueda.Columns["MODIFICADOPOR"].Visible = false;
                        gridBusqueda.Columns["NOMBEQUIPO"].Visible = false;
                        gridBusqueda.Columns["EQUIPO_ESTADO"].Visible = false;
                        gridBusqueda.Columns["TIPOEQUIPO1"].HeaderText = "Tipo de equipo";
                        gridBusqueda.Columns["RELACION_EQUI_PROG"].Visible = false;
                        gridBusqueda.Columns["USUARIO"].Visible = false;
                        gridBusqueda.Columns["MOVIMIENTO"].Visible = false;                        
                        break;
                }
            }
        }

        private void gridBusqueda_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (gridBusqueda.Rows.Count > 0)
            {
                int selectedRow = e.RowIndex;
                
                if (selectedRow >= 0)
                {
                    ObjetoBuscado = gridBusqueda.Rows[selectedRow].DataBoundItem;
                    this.Close();
                }
            }
        }

        private void txtValor_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter || e.KeyCode == Keys.Return)
            {
                btnBuscar_Click(sender, EventArgs.Empty);
            }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            if (gridBusqueda.SelectedRows.Count > 0)
            {
                ObjetoBuscado = gridBusqueda.SelectedRows[0].DataBoundItem;
            }

            this.Close();
        }

        private void gridBusqueda_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (gridBusqueda.Columns[e.ColumnIndex].Name == "TIPOEQUIPO1")
            {
                AccesoDatos.TIPOEQUIPO tipoequipo = e.Value as AccesoDatos.TIPOEQUIPO;

                if (tipoequipo != null)
                {
                    e.Value = tipoequipo.NOMBRETIPO.Trim();
                }
            }
        }

        private void cmbBuscarPor_SelectionChangeCommitted(object sender, EventArgs e)
        {
            if (nombre.Equals("Equipo"))
            {
                string selectedKey = listBusqueda.SingleOrDefault(x => x.Key.Equals(cmbBuscarPor.SelectedValue.ToString())).Key;

                switch (selectedKey)
                {
                    case "TIPOEQUIPO":
                        txtValor.CharacterCasing = CharacterCasing.Normal;
                        break;
                    case "MARCA":
                        txtValor.CharacterCasing = CharacterCasing.Upper;
                        break;
                    case "MODELO":
                        txtValor.CharacterCasing = CharacterCasing.Upper;
                        break;
                    case "SERIE":
                        txtValor.CharacterCasing = CharacterCasing.Upper;
                        break;
                }
            }
            else if(nombre.Equals("Usuario"))
            {
                txtValor.CharacterCasing = CharacterCasing.Upper;
            }

            txtValor.ResetText();
        }
    }
}
